package com.cmyshare.design.abstractFactoryPattern;

/**
 * @version 1.0
 * @Author cmy
 * @Date 2023/10/9 18:05
 * @desc 10、测试类
 */
public class Test {
    /**
     * 举例：黑白狗猫吃东西的抽象工厂模式案例
     * @param args
     */
    public static void main(String[] args) {
        //通过抽象工厂接口实现类BlackAnimalFactory向上转型，实例化IAnimalFactory抽象工厂接口
        IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
        //得到实例化抽象产品接口ICat
        ICat blackCat = blackAnimalFactory.createCat();
        //接口回调，所以会调用实现类BlackCat下的doWork方法
        blackCat.eat();
        //得到实例化抽象产品接口IDog
        IDog blackDog = blackAnimalFactory.createDog();
        //接口回调，所以会调用实现类BlackDog下的doWork方法
        blackDog.eat();

        IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
        ICat whiteCat = whiteAnimalFactory.createCat();
        whiteCat.eat();
        IDog whiteDog = whiteAnimalFactory.createDog();
        whiteDog.eat();
    }
}
